lpunbfandomcom-20200214-history
Linguagem ADA - Grupo 2
O grupo 2 é constituido pelos alunos: Lécio Pery Júnior - 10/0015182, Luis Amaral - 10/0035108, Milson Sacramento. Rafael Machado da Rosa - 11/0146131. Contexto de Criação A importância do contexto que levou ao desenvolvimento da linguagem ADA, ou de qualquer outra linguagem, remete diretamente ao conhecimento sobre público alvo(usuário característico), domínio de aplicação e às premissas. A linguagem ADA foi criada sob um contexto militar norte-americano. Mais especificamente, o Departamento de Defesa dos Estados Unidos (DOD ou DoD de Department of Defense fazia o uso de linguagens de programação que levavam à um elevado custo de manutenção e, ao mesmo tempo, à uma baixa confiabilidade. Era crucial uma substituição não só objetivando a universalização da linguagem dentro do departamento como também para corrigir as deficiências suprecitadas. É uma linguagem, portanto, com compiladores validados para uso confiável em missões criticas, tais como softwares de aviação. Vide referências bibliográficas: Criou-se o HOLWG(High Order Language Working Group) para levantar os requerimentos para essa linguagem, tanto no meio civil quanto no meio militar. Houveram vários países participantes. Eventualmente, em uma competição desencadeada entre 17 empresas privadas para formular uma linguagem, a CII Honeywell Bull e sua equipe liderada por Jean Ichbiah criou uma linguagem chamada Green vencendo tal competição. Consultando a bibliografia equivalente à ida de Ichbiah, percebe-se que esta linguagem, ao ser aceita em 1978, foi renomeada para ADA em homenagem à condessa de Lovelace. Devido ao fato de que, com o tempo, a linguagem foi avançando e progredindo como toda linguagem de sucesso, manteremos, com o objetivo de sermos sucintos, nossa análise focada em uma das versões mais antigas que é a ADA95, embora o primeiro padrão iso seja ADA83 lançada logo após a linguagem ADA82. Basicamente, é uma forma de nos mantermos "à essência" da Linguagem de Programação em questão uma vez que esta versão(95) é praticamente um conjunto levemente extendido da ADA83, mas que não abarca conceitos de outras Linguagens de Programação localizadas fora dos paradigmas imperativo e orientado à objetos, algo que ADA2005 faz. Em outras palavras, não é uma análise interessante da linguagem se tomadas versões mais recentes como referência, uma vez que as mesmas podem estar "impregnadas" com outras linguagens e, eventualmente, com outros paradigmas que não o seu original. Não é um salto grande afirmar que tal revisão sobre a linguagem estará igualmente "contaminada" e fora de seu contexto original e, se tratando da cronologia da linguagem, no levaria à uma espécie de anarcronismo onde é possível pensar que na década de 80 programava-se em ADA como quando após os anos 2000 com ADA2006. Usuário Característico (Público alvo) O usuário característico é o programador especialista em programação defensiva, que trabalha em aplicações críticas, geralmente envolvendo software embarcado. Portanto desempenha um trabalho que possui alto risco em termos de vários recursos uma vez que um erro pode levar desde quantidades demasiadas de dinheiro até muitas vidas perdidas. É também dedicada a usuários que desejam elevada performance sem, ao mesmo tempo, sacrificar a segurança, crucial para aplicações de alto risco como controle em reatores nucleares, por exemplo, onde é necessário que vários cálculos sejam efetuados corretamente, em velocidade relativamente alta, e com um gerenciamento de memória preciso. Esses requisitos excluem desse domínio de aplicação imediatamente linguagens como Haskell e Java, mas deixa aberto linguagens como C e C++ mas, ainda sim, encontra-se mais adequada que os anteriores até hoje, por sua segurança de tipos ser foco ainda maior que em ansi C, por exemplo. Não é anarcrônico tal comparação. Na verdade, mostra que se tal linguagem não é superada nesse domínio até hoje significa que as outras linguagens de sua época estavam realmente ultrapassadas neste campo específico. Resumidamente, um usuário genérico é aquele que precisa de alta performance sem sacrificar segurança de tipos e de gerenciamento de memória, não necessariamente estando preso ao contexto original de aplicação de alto risco. Pode ser apenas um usuário que precise de qualidade no produto final. É óbvio de forma extremada no entanto que o domínio de aplicação é bem expandido e mais abrangente conforme avança-se em outras versões de ADA como ADA2005 e ADA2012 e portanto, como já explicado, essas versões não foram abarcadas por se distanciarem do contexto original, o que potencialmente influencia de forma negativa a análise da linguagem dada a desvirtuação de seu propósito inicial. Premissas(no contexto original e em ADA95) Assume que o paradigma adotado é o imperativo. Assume programação defensiva com padrão de projeto. Com modularização. Assume tipagem estática com checagem extensiva. E extensiva principalmente quando tratas-e de matrizes. Assume o maior conjunto de regras para igualdade entre elementos. Prevê alta performance ainda que não a melhor dentre as linguagens existentes. Prevê capacidade de recursão, diferentemente de linguagens como FORTRAN(original). Prevê uso de ponteiros de forma similar à Ansi C. Domínio de aplicação Como já dito anteriormente, são parte integrante do domínio de aplicação a programação defensiva e aplicações de alto risco onde desempenho crítico e seugrança são ambos críticos. Também se aplica a situações onde a segurança da informação e a proteção de dados confidenciais são cruciais, uma vez que é uma linguagem bem menos aberta, em suas implementações, à vulnerabilidades como Stack Overflow, que revelaria dados sigilosos sobre tal aplicação. Um usuário mal intencionado poderia causar sabotagens industriais como acontece em produtos desenvolvidos, por exemplo, em C. ADA já possuia encapsulamento e tipos derivados desde 1980, ainda que classes propriamente ditas foram introduzidas apenas em ADA 1995. Isso significa que embora não fosse formalmente orientada a objetos, outro domínio de aplicação é qualquer campo onde seja requisitada a Orientação à Objetos ou, pelo menos, conceitos de herança. Sintaxe ADA não é case sensitive, mas boas práticas de programação recomendam, no entanto, a adoção de alguma convenção. Existem muitos artifícios e elmentos únicos da linguagem. Bem como C++ ou Java, ADA é uma linguagem popular até determinado nível, e como tal é impossível abrangir todos os aspectos. Selecionamos abaixo os mais importantes: Estrutura de um programa A sintaxe de um programa em ADA95 é similar a de Pascal, que foi muito influente em sua criação. A sintaxe básica de um programa em ADA95 constitui de uma parte declarativa e outra exectável. No código à seguir, retirado de http://www.infres.enst.fr/~pautet/Ada95/e_c02_p1.ada, a declarativa está compreendida entre as palavras chaves is e begin, enquanto a executável entre begin e end. Nesse código específico, como não utilizamos nenhuma variável, a parte declarativa é vazia. with Ada.Text_IO; use Ada.Text_IO; procedure UglyForm is begin Put ("Good form "); Put("can aid in "); Put ("understanding a program,"); New_Line; Put("and bad form "); Put ("can make a program "); Put("unreadable."); New_Line; end UglyForm; É válido observar que utilizamos bibliotecas e as declaramos externamente à seção delimitada por is e being, isso é porque as bibliotecas não são para serem utilizadas localmente no arquivo, e são declaradas preferencialmente no início do programa. Atribuições Estruturas de controle Tomadas de decisão: if e case podem ser vistos em termos de sintaxe de forma intuitiva apartir da análise do código abaixo, lembrando que Switch é declarado como do subtipo Small_Int que por sua vez deriva-se do tipo Interger, sendo um subconjunto deste. Assim, pode-se facilmente perceber que em runtime que "Switch" é um número entre 1 e 5 contendo os próprios 1 e 5. subtype Small_Int is Integer range 1 .. 5; Switch : Small_Int; ... -- Case statement case Switch is when 1 => ... when 2 => ... when 3 => ... when 4 => ... when 5 => ... end case; -- "elsif construct" if Switch = 1 then ... elsif Switch = 2 then ... elsif Switch = 3 then ... elsif Switch = 4 then ... elsif Switch = 5 then ... end if; Laços de repetição: no código abaixo, há exemplo de uso de todos os laços de controle disponíveis em ADA95. São elas loop, while, for. Nota-se que loop precisa de um exit como critério de parada e tanto o for quanto o while(este não demostrado) pode ser feitos na "ordem inversa", utilizando a keyword reverse antes do range especificado. A sintaxe genérica é: . , onde é uma operação retornando valores booleanos como "Count < 5". with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; procedure LoopDemo is Index, Count : INTEGER; begin Index := 1; loop -- This is the simplest loop Put("Index ="); Put(Index, 5); New_Line; Index := Index + 1; exit when Index = 5; end loop; Index := 1; loop -- Another simplest loop Put("Index ="); Put(Index, 5); New_Line; Index := Index + 1; if Index = 5 then exit; end if; end loop; Count := 1; while Count < 5 loop -- This is the while loop Put("Count ="); Put(Count, 5); New_Line; Count := Count + 1; end loop; for Index in 1..4 loop -- This is the for loop Put("Doubled index ="); Put(2 * Index, 5); New_Line; end loop; for Count in reverse 5..8 loop -- This is the reverse for loop Put("Triple count ="); Put(3 * Count, 5); New_Line; end loop; for Index in 7..11 loop -- An empty loop null; end loop; end LoopDemo; Palavras reservadas Originalmente, ADA83 possuia somente 63 keywords(palavras reservadas). ADA95, nosso foco, possui 69 keywords que são: abort abs abstract accept access aliased all and array at begin body case constant declare delay delta digits do else elsif end entry exception exit for function generic goto if in is limited loop mod new not null of or others out package pragma private procedure protected raise range record rem renames requeue return reverse select separate subtype tagged task terminate then type until use when while with xor Como dito, foram adicionadas 6 keywords, que são: abstract aliased protected requeue tagged until Pragmas para controle do compilador Existe um total de 38 pragmas, 29 foram introduzidos no ADA95 enquanto 5 foram removidos. A seguir temos a listagem dos 29 referidos: All_Calls_Remote Asynchronous Atomic Atomic_Components Attach_Handler Convention Discard_Names Elaborate_All Elaborate_Body Export Import Inspection_Point Interrupt_Handler Interrupt_Priority Linker_Options Locking_Policy Normalize_Scalars Preelaborate Pure Queueing_Policy Remote_Call_Interface Remote_Types Restrictions Reviewable Shared_Passive Storage_Size Task_Dispatching_Policy Volatile Volatile_Components. Os 14 pragmas originais(incluindo os 5 obsoletos) são: Controlled Elaborate Inline Interface(obsoleto) List Memory_Size(obsoleto) Optimize Pack Page Priority Shared(obsoleto) Storage_Unit(obsoleto) Suppress System_Name(obsoleto). Atributos Os atributos em ADA95 são os 40 atributos de ADA83, menos os 7 obsoletos, mais os 52 introduzidos em ADA95: Access Adjacent Alignment Bit_Order Body_Version Caller Ceiling Class Component_Size Compose Copy_Sign Definite Denorm Exponent External_Tag Floor Fraction Identity Input Leading_Part Machine Max Max_Size_In_Storage_Elements Min Model Model_Emin Model_Epsilon Model_Mantissa Model_Small Modulus Output Partition_ID Read Remainder Round Rounding Safe_First Safe_Last Scale Scaling Signed_Zeros Storage_Pool Tag Truncation Unbiased_Rounding Unchecked_Access Valid Version Wide_Image Wide_Value Wide_Width Write. ADA83 (contendo os obsoletos): Address Aft Base Callable Constrained Count Delta Digits Emax(obsoleto) Epsilon(obsoleto) First First_Bit Fore Image Large(obsoleto) Last Last_Bit Length Machine_Emax Machine_Emin Machine_Mantissa Machine_Overflows Machine_Radix Machine_Rounds Mantissa(obsoleto) Pos Position Pred Range Safe_Emax(obsoleto) Safe_Large(obsoleto) Safe_Small(obsoleto) Size Small Storage_Size Succ Terminated Val Value Width. Comentários Os comentários são iguais ao comentário simples da linguagem haskell, utilizando um duplo sinal de menos (--) antes da parte que deve ser ignorada. Exemplo: -- Este é um comentário válido em ADA95. Outras estruturas da linguagem Atribuições: Inclusão de bibliotecas: Referências (bibliografia) http://wms.cs.kuleuven.be/cs/ (em seu ftp:) ftp://ftp.cs.kuleuven.be/pub/Ada-Belgium/mirrors/pal/ajpo/pol-hist/history/holwg-93/2.htm ftp://ftp.cs.kuleuven.be/pub/Ada-Belgium/mirrors/pal/ajpo/pol-hist/history/holwg- Referência de sintaxe (ADA95): http://www.cs.washington.edu/education/courses/cse590p/03au/7ada_tutorial.htm Manual de referência oficial do ADA95: http://www.adahome.com/rm95/ Category:ADA grupo 2